const nodemailer = require("nodemailer");
const smtpTransport = require("nodemailer-smtp-transport");
const { saveCode } = require("./genCode");
const html = require("./html");

// 生成6位随机验证码
const randomCode = () => {
  let code = "";
  for (let i = 0; i < 4; i++) {
    code += parseInt(Math.random() * 10);
  }
  return code;
};

// 邮件配置
const EMAIL_CONFIG = {
  host: "smtp.qq.com", // 服务 用qq邮箱
  port: 465, // smtp端口 默认无需改动
  secure: true,
  auth: {
    user: "2743537306@qq.com", // 用户名
    pass: process.env.SMTP_CODE, // SMTP授权码
  },
};

// 发件人配置
const SENDER_CONFIG = {
  name: "旅游系统", // 自定义发件人名称
  email: "2743537306@qq.com", // 发件人邮箱
};

// 初始化设置
const transport = nodemailer.createTransport(smtpTransport(EMAIL_CONFIG));

const email_reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

// 发送邮件验证码
const sendEmailCode = (email) => {
  return new Promise((resolve, reject) => {
    if (email_reg.test(email)) {
      // 邮箱验证通过
      const verificationCode = randomCode();
      // 保存验证码
      saveCode(email, verificationCode);

      // 构建发件人信息 - 正确格式：名称 <邮箱>
      const from = `"${SENDER_CONFIG.name}" <${SENDER_CONFIG.email}>`;

      transport.sendMail(
        {
          from: from, // 自定义发件人格式：名称 <邮箱>
          to: email, // 收件人
          subject: "🔐 验证码 - 旅游系统", // 标题
          html: html(verificationCode), // html 内容
        },
        function (err, data) {
          if (err) {
            console.log("发送验证码失败！", err);
            reject("sendCode error");
            transport.close(); //关闭连接池
          } else {
            console.log("邮件发送成功！");
            resolve({ success: true, code: verificationCode });
            transport.close(); //关闭连接池
          }
        }
      );
    } else {
      console.log("邮箱格式错误！");
      reject("emailFormat error");
    }
  });
};

module.exports = { sendEmailCode };
